// /import core
// /commands 插入内容
// /commands 插入框架
/**
 * @description 插入内容
 * @name baidu.editor.execCommand
 * @param {String}
 *            cmdName inserthtml插入内容的命令
 * @param {String}
 *            html 要插入的内容
 * @author zhanyi
 */
(function() {
	var domUtils = baidu.editor.dom.domUtils, dtd = baidu.editor.dom.dtd, utils = baidu.editor.utils, browser = baidu.editor.browser;
	baidu.editor.commands['inserthtml'] = {
		execCommand : function(command, html) {
			var editor = this, range, deletedElms, i, ci, div, tds = editor.currentSelectedArr;

			range = editor.selection.getRange();

			div = range.document.createElement('div');
			div.style.display = 'inline';
			div.innerHTML = utils.trim(html);

			try {
				editor.adjustTable && editor.adjustTable(div);
			} catch (e) {
			}

			if (tds && tds.length) {
				for (var i = 0, ti; ti = tds[i++];) {
					ti.className = ''
				}
				tds[0].innerHTML = '';
				range.setStart(tds[0], 0).collapse(true);
				editor.currentSelectedArr = [];
			}

			if (!range.collapsed) {

				range.deleteContents();
				if (range.startContainer.nodeType == 1) {
					var child = range.startContainer.childNodes[range.startOffset], pre;
					if (child && domUtils.isBlockElm(child)
							&& (pre = child.previousSibling)
							&& domUtils.isBlockElm(pre)) {
						range.setEnd(pre, pre.childNodes.length).collapse();
						while (child.firstChild) {
							pre.appendChild(child.firstChild);

						}
						domUtils.remove(child);
					}
				}

			}

			var child, parent, pre, tmp, hadBreak = 0;
			while (child = div.firstChild) {
				range.insertNode(child);
				if (!hadBreak && child.nodeType == domUtils.NODE_ELEMENT
						&& domUtils.isBlockElm(child)) {

					parent = domUtils.findParent(child, function(node) {
								return domUtils.isBlockElm(node);
							});
					if (parent
							&& parent.tagName.toLowerCase() != 'body'
							&& !(dtd[parent.tagName][child.nodeName] && child.parentNode === parent)) {
						if (!dtd[parent.tagName][child.nodeName]) {
							pre = parent;
						} else {
							tmp = child.parentNode;
							while (tmp !== parent) {
								pre = tmp;
								tmp = tmp.parentNode;

							}
						}

						domUtils.breakParent(child, pre || tmp);
						// 去掉break后前一个多余的节点 <p>|<[p> ==>
						// <p></p><div></div><p>|</p>
						var pre = child.previousSibling;
						domUtils.trimWhiteTextNode(pre);
						if (!pre.childNodes.length) {
							domUtils.remove(pre);
						}
						hadBreak = 1;
					}
				}
				var next = child.nextSibling;
				if (!div.firstChild && next && domUtils.isBlockElm(next)) {

					range.setStart(next, 0).collapse(true);
					break;
				}
				range.setEndAfter(child).collapse();

			}
			// if(!range.startContainer.childNodes[range.startOffset] &&
			// domUtils.isBlockElm(range.startContainer)){
			// next = editor.document.createElement('br');
			// range.insertNode(next);
			// range.collapse(true);
			// }
			// block为空无法定位光标

			child = range.startContainer;
			// 用chrome可能有空白展位符
			if (domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)) {
				child.innerHTML = baidu.editor.browser.ie ? '' : '<br/>'
			}
			// 加上true因为在删除表情等时会删两次，第一次是删的fillData
			range.select(true);

			setTimeout(function() {
						range = editor.selection.getRange();
						range.scrollToView(editor.autoHeightEnabled,
								editor.autoHeightEnabled ? domUtils
										.getXY(editor.iframe).y : 0);
					}, 200)

		}
	};
}());
